package 类加载器.类的初始化阶段;

import org.junit.Test;

/**
 * <P> @Author: ideaAdmin
 * <P> TODO: Class
 * <P> TODO: 1．当访问一个静态字段时，只有真正声明这个字段的类才会被初始化。
 * 		 TODO:>当通过子类引用父类的静态变量，不会导致子类初始化
 * 		        如果父类同时是final+static的常量 父类也不会被初始化
 *
 *          TODO:2. 通过数组定义类引用，不会触发此类的初始化
 *

 * <P> Date: 2022/3/28:22:23
 * <P> Description:
 */

public class PassiveUse1 {
    @Test
    public void test1(){
        System.out.println(Child.num);
    }

    @Test
    public void test2(){
        //不会触发类的初始化 会先加载类
        Parent[] parents = new Parent[10];
        System.out.println(parents.getClass());
        System.out.println(parents.getClass().getSuperclass());

        //会触发
        parents[0] = new Parent();


    }
}

class Parent{
    static {
        System.out.println("父类的.static initializer");
    }
    public static int num = 1;
}
class Child extends Parent{
    static {
        System.out.println("Child.子类的initializer");
    }
}